home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from common.Conversation import Conversation
- from util import dictadd, callsback
- from yahoo.yahoobuddy import YahooBuddy
- from yahoo.yahoolookup import ykeys
- from yahoo import yahooformat
- from logging import getLogger
- log = getLogger('yahoo.convo')
-
- class YahooConvoBase(Conversation):
-
- def __init__(self, protocol):
- Conversation.__init__(self)
- self.__dict__.update(protocol = protocol, buddies = protocol.buddies, self_buddy = protocol.self_buddy)
-
-
- def buddy_join(self, buddy):
- self += self.room_list if buddy not in self.room_list else []
- self.typing_status[buddy] = None
-
-
- def buddy_leave(self, buddy):
- if buddy in self.room_list:
- self.room_list.remove(buddy)
- del self.typing_status[buddy]
-
-
-
- def incoming_message(self, buddy, message, timestamp = None):
- if not isinstance(buddy, YahooBuddy):
- raise TypeError()
-
- message = yahooformat.tohtml(message.decode('utf-8', 'replace'))
- message = newlines_to_brs(message)
- self.typing_status[buddy] = None
- if timestamp is None:
- kws = { }
- else:
- kws = dict(timestamp = timestamp)
- self.received_message(buddy, message, **kws)
- Conversation.incoming_message(self)
-
-
- def myname(self):
- return self.self_buddy.name
-
- myname = property(myname)
-
- def send_typing_status(self, status = None):
- pass
-
-
-
- class YahooConvo(YahooConvoBase):
- ischat = False
-
- def __init__(self, parent_protocol, buddy):
- YahooConvoBase.__init__(self, parent_protocol)
- self.buddy_join(parent_protocol.self_buddy)
- self.buddy_join(buddy)
- self.name = buddy.alias
- self.to_from = {
- '1': self.myname,
- '5': buddy.name }
-
-
- def _send_message(self, message, auto = False, callback = None, **options):
- network_msg = message
- format = options.get('format', None)
- if format:
- network_msg = yahooformat.format(format, network_msg)
-
- network_msg = network_msg.encode('utf-8')
- d = {
- ykeys['message']: network_msg,
- ykeys['msg_encoding']: '1' }
- import YahooProtocol
- servicekey = YahooProtocol.PROTOCOL_CODES.get(self.buddy.service, None)
- if servicekey is not None:
- d[ykeys['buddy_service']] = servicekey
-
- log.info('Sending message to %r. buddy_service=%r', self.buddy, self.buddy.service == 'msn')
-
- try:
- self.protocol.send('message', 'offline', dictadd(self.to_from, d))
- except Exception:
- e = None
- callback.error(e)
-
- callback.success()
-
- _send_message = callsback(_send_message)
-
- def self_buddy(self):
- return self.protocol.self_buddy
-
- self_buddy = property(self_buddy)
-
- def send_typing_status(self, status = None):
- typing_now = status == 'typing'
- None(log.debug, 'sending %styping' if not typing_now else '')
- None(self.protocol.send, 'notify', [
- 'typing',
- 'typing_status',
- 'TYPING',
- 'frombuddy',
- self.self_buddy.name,
- 'message',
- '',
- 'flag' if typing_now else '0',
- 'to',
- self.buddy.name])
-
-
- def exit(self):
- self.protocol.exit_conversation(self)
-
-
- def __repr__(self):
- return '<%s with %s from %s>' % (self.__class__.__name__, self.buddy, self.protocol.username)
-
-
-
- class YahooConf(YahooConvoBase):
- ischat = True
-
- def __init__(self, parent_protocol, name):
- YahooConvoBase.__init__(self, parent_protocol)
- self.name = name
-
-
- def invite(self, buddy, message = None):
- bname = getattr(buddy, 'name', buddy)
- self.protocol.invite_to_conference(self.name, bname, message)
-
-
- def _send_message(self, message):
- users = []
- _[1]
- self.received_message(self.protocol.self_buddy, message)
-
-
- def exit(self):
- self.protocol.send('conflogoff', 'available', frombuddy = self.self_buddy.name, conf_name = self.name)
-
-
- def __repr__(self):
- return '<YahooConf %s (%d members)>' % (self.name, len(self.room_list))
-
-
-
- class YahooChat(YahooConvoBase):
-
- def __init__(self, parent_protocol, name = 'Yahoo Chat', topic = ''):
- YahooConvoBase.__init__(self, parent_protocol)
- self.name = name
- self.topic = topic
-
-
- def _send_message(self, message):
- log.info_s('send_message for %r: %s', self, message)
- self.protocol.send('comment', 'available', dictadd(dict(frombuddy = self.myname, room_name = self.name, chat_message = message), {
- '124': '1' }))
-
-
- def exit(self):
- log.info('YahooChat exit: sending chatlogout_available')
- self.protocol.send('chatlogout', 'available', frombuddy = self.myname)
-
-
- def __repr__(self):
- return '<YahooChat %s (%d members, topic: %s)' % (self.name, len(self.room_list), self.topic)
-
-
-
- def newlines_to_brs(s, br = '<br />'):
- return s.replace('\r\n', '\n').replace('\n', br).replace('\r', br)
-
-